"""
创建数据库时，可能没有任何数据表，只链接MySql就行
本类只链接MySql，不打开数据库
"""
import mysql.connector

# 
class OpenMySqlNoDb:
    # 连接配置
    config = {
        'host': 'localhost',
        'user': 'root',
        'password': 'dreamren',
        'port': 3306,
        'raise_on_warnings': True
    }
    def __init__(self):
        """
        初始化MySql连接，只链接mysql，不链接数据库
        :param host: MySQL 服务器地址
        :param user: 数据库用户名
        :param password: 数据库用户密码
        """
        try:
            #  `mysql.connector.connect()` 函数需要接收独立的参数（如 `user`, `password`, `host` 等），而将配置保存在字典中再用 `**` 解包，可以让代码更整洁、易于管理
            self.connection = mysql.connector.connect(**self.config)
            # dictionary=True 以字典格式返回，否则以元组形式返回数据
            self.cursor = self.connection.cursor(dictionary=True)
            print("成功连接MySql")
        except mysql.connector.Error as err:
            print(f"MySql连接失败: {err}")
            exit()

    def validation_char(self):
        """
        执行时需要输入指定字符才能继续
        """
        while True:
            user_input = input("请输入执行秘钥：")
            if user_input=='dreamren':
                print('秘钥验证通过')
                return 'success'
            elif user_input=='exit':
                print('主动结束，程序未执行')
                exit()
            else:
                print("✘ 秘钥无效，请重新输入输入。 ★ 输入：exit 结束程序")


    def create_database(self, database_name):
        """
        创建的数据库，默认字符集：utf8mb4。 注意：是数据库，不是数据表
        :param database_name: 要创建的数据库名，
        :param columns: 表的列定义，如 'id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255)'
        """
        if not database_name:
            return "数据库名为空"
        # 请求用户输入秘钥
        valid = self.validation_char()

        # 秘钥正确，继续执行下面的代码
        try:
            # 标准的 SQL 语法并不直接支持 IF NOT EXISTS 来返回一个状态或执行结果
            create_database_query = f"CREATE DATABASE IF NOT EXISTS {database_name}"
            self.cursor.execute(create_database_query)
            self.connection.commit()
            print(f"数据库 {database_name} 创建成功")
        except mysql.connector.Error as err:
            print(f"创建数据库时出错: {err}")
            exit()


    def close_connection(self):
        """
        关闭数据库连接和游标
        """
        if self.cursor:
            self.cursor.close()
        if self.connection:
            self.connection.close()
        print("数据库连接已关闭")


# ***************

"""
使用示例：
from dream_class.ConnMySql import OpenMySqlNoDb # 只用于创建数据库
create_db = OpenMySqlNoDb()
create_db.create_database("database_name")
print('创建数据库成功')
# 关闭Mysql连接
create_db.close_connection()
"""